我使用最新的IE和Chrome驱动程序(使用Java 1.8)运行selenium 3 - 这两种浏览器都适用于我的所有测试。我已经安装了Phantomjs,因为我们希望它在构建服务器上运行。
下拉框非常棘手,因为它由三部分组成,请参阅代码:
//POM
@FindBy(how = How.ID,using = "s2id_leads_lead_provider_source_channel")
private WebElement dropdownboxLeadProvider;
@FindBy(how = How.XPATH,using = "//div[@id='select2-drop']//input[contains(@id,'s2id_autogen')]")
private WebElement search_InAnyDropdownbox;
@FindBy(how = How.CLASS_NAME,using = "select2-result-label")
private List<WebElement> allOptions_InAnyDropdownbox;
// Code that I use to select item in dropdownbox
utilityWebElementExtras.selectItemInDropdownBox(dropdownboxLeadProvider, search_InAnyDropdownbox, allOptions_InAnyDropdownbox,"Broker");
// this is the method in the class that I use
public static void selectItemInDropdownBox(WebElement dropdownbox,WebElement inputSearch,List<WebElement> allOptionsList,String selectedItem){
browser.ExplicitWait(dropdownbox);
dropdownbox.click();
browser.ExplicitWait(inputSearch);
inputSearch.sendKeys(selectedItem);
browser.ExplicitWaitList(allOptionsList);
int counter = 0;
for ( WebElement i: allOptionsList) {
System.out.println("test3");
if ( i.getText().trim().equals( selectedItem ) ) {
allOptionsList.get(counter).click();
break;
}
counter++;
}
}
由于某些原因,当我运行它时,幻像驱动程序无法拾取下拉框,它看起来像它看到它但它无法做任何事情,例如,如果我做.click或.Sendkeys(keys.Enter)或。 SendKeys(&#34; test&#34;),它什么都不做。如果它失败的是当它尝试使用输入搜索时,它无法看到它,因为在HTML中它被禁用/隐藏,只有当你点击下拉框时它才会在HTML中启用/取消隐藏。任何想要尝试的想法都会被贬低?最后一件事看起来它确实拿起了其余的屏幕网页元素,例如我能够使用文本框和单选按钮。
答案 0 :(得分:0)
我确实找到了一个解决方案,它就是定义web元素的方式。
例如
@FindBy(how = How.ID,using = "s2id_leads_lead_provider_source_channel")
private WebElement dropdownboxLeadProvider1;
//But since I used XPath, Phantomjs was able to execute dropdownboxLeadProvider1.click();
@FindBy(how = How.XPATH,using = "//div[@id='s2id_leads_lead_provider_source_channel']//a//span[contains(@id,'select2-chosen-')]")
private WebElement dropdownboxLeadProvider1;
看起来像Phantomjs它真的想要自动生成ID,因为使用指定自动生成ID的x路径 - 它可以工作,我可以点击下拉框。