因此,我试图弄清楚如何获取正确的 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()
答案 0 :(得分:0)
您的屏幕截图没有显示选择“快速模式”后将出现的任何选项,因此很难为您提供选择帮助。但是,“快速模式”确实有一个独特的类“下拉列表搜索模式”
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)之后,才能使用它。
答案 1 :(得分:0)
我已经用Java硒完成了一个自动化项目,在其中我对下拉菜单执行了操作
//在页面对象中
ISODate()
//在测试文件中
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;
}
答案 2 :(得分:0)
要在文本为 Job 的元素上click()
,必须诱使 WebDriverWait 使元素可点击可以使用以下任一Locator Strategies:
使用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