繁体   English   中英

使用Python Selenium访问下拉元素

[英]Accessing drop down element using Python Selenium

因此,我试图找出如何获取正确的cssSelector来从Python Web驱动程序访问Selenium的html元素。

我有一个页面,其中有两个下拉选项。 我想选择一个显示“快速模式”的选项,然后使用Python Web驱动程序在下拉菜单中选择第二个选项。

在此处输入图片说明

左侧的类似下拉菜单也具有类似的元素

<a class="btn-pill dropdown-toggle active" href="#" data-dialog-id="dialog-view28363">                      <i class="message-indicator icon-info-circle" style=""></i>                     Job<span class="caret"></span>                  </a>

当类名相同时,如何找到正确的cssSelector

有一个data-dialog-id似乎具有diff值,但不确定Web驱动程序中的哪种方法可以帮助我使用它。

我的访问元素代码如下:

driver = webdriver.Chrome()
toggle_button=driver.find_element_by_css_selector('a[data-dialog-id="]')
toggle_button.click()

您的屏幕快照未显示选择“快速模式”后将出现的任何选项,因此很难为您提供选择帮助。 但是,“快速模式”确实有一个独特的类“下拉下拉搜索模式”

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
fast_mode_button=driver.find_element_by_css_selector('a.dropdown-toggle-search-mode')
fast_mode_button.click()
# now wait for the menu to open, before clicking on your option
options = WebDriverWait(driver, 10).until(EC.visibility_of_elements_located((By.CSS_SELECTOR, 'css_selector_for_menu_options')))
options[2].click()

我之所以避免使用data-dialog-id属性,只是因为我怀疑它与每个产品版本都不一致,但是如果您确定总会有一对一的关联,则可以使用它,但只有在您点击显示链接的链接之后(fast_mode_button)。

我在Java硒中完成了一个自动化项目,在下拉菜单中我执行了一些操作

//在页面对象中

public static WebElement idProof(WebDriver driver)
    {
        WebElement element=null;
        WebDriverWait wait=new WebDriverWait(driver, 50);
        element=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='panel-body']//div[3]//div[2]//div[1]//a[1]//span[1]")));
        return element;
    }

    public static WebElement idProofVoterId(WebDriver driver, String idVal)
    {
        WebElement element=null;
        WebDriverWait wait=new WebDriverWait(driver, 50);
        element=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//li[contains(text(),'" + idVal +"')]")));
        return element;
    }

//在测试文件中

    {        WebElement idProof = FrmrPage.idProof(driver);
            idProof.click();
            Genlib.sleep(2000);

            WebElement voterId = FrmrPage.idProofVoterId(driver, datArr[8]);
            voterId.click();
            test.pass("ID Proof: " + datArr[8]);
            Genlib.sleep(1000);
    }

要在文本为Job的元素上click() ,必须诱使WebDriverWait使该元素可单击,并且可以使用以下定位策略之一

  • 使用PARTIAL_LINK_TEXT

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Job"))).click() 
  • 使用XPATH A

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='btn-pill dropdown-toggle active' and contains(., 'Job')]"))).click() 
  • 使用XPATH B

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='btn-pill dropdown-toggle active' and normalize-space()='Job']"))).click() 
  • 注意 :您必须添加以下导入:

     from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM