Phantomjs浏览器(Selenium)无法在下拉框

时间:2017-01-24 07:13:02

标签: selenium-webdriver phantomjs

我使用最新的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中启用/取消隐藏。任何想要尝试的想法都会被贬低?最后一件事看起来它确实拿起了其余的屏幕网页元素,例如我能够使用文本框和单选按钮。

1 个答案:

答案 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路径 - 它可以工作,我可以点击下拉框。