为什么WebDriver在“点击”元素时不会移动到下一页?

时间:2017-09-12 04:08:47

标签: javascript selenium

我在做:

driver = new webdriver.Builder()
          .forBrowser('safari')
          .build();
var referrer = 'http://localhost:3000/tours/hood-river';
//        console.log(referrer);
        driver.get(referrer);
        driver.findElement(By.id('requestGroupRate')).click();
        //requestGroupRate is a link, so clicking it should move it to a new page

        driver.wait(function(){

                return driver.findElement(By.id('myThing')).then(function(element){
                console.log("hereere");
                assert(element.value === referrer);
                done();
            });
        },10000);

我发现findElement(By.id('myThing'))失败,即使它应该在的页面上显然有'myThing'。但是,如果我将行更改为

driver.findElement(By.id('requestGroupRate'))..

然后找到元素!这让我相信,click()不会导致驱动程序导航到链接。

编辑:我试图点击的链接:

<a id="requestGroupRate" 
   href="/tours/request-group-rate">Request Group Rate.</a>

2 个答案:

答案 0 :(得分:0)

根据acdcjunior的建议,如果元素是可点击的,请使用浏览器开发者工具。 Chrome是一个侧面板,Firefox是HTML标签末尾的标记。

我遇到了让Selenium点击GIS地图的问题。在这种情况下,我使用替代方案(将需要将此Java转换为Javascript):

    ((JavascriptExecutor) driver).executeScript("document.getElementById('map_container').dispatchEvent(new Event('click'));");

还建议在浏览器开发者控制台中测试您的xpath:

    document.evaluate(".//tagName[@id='Query']", document,null, XPathResult.ANY_TYPE, null).iterateNext();

或者在浏览器开发者控制台中测试你的cssSelector:

    document.querySelector('#idtext')

答案 1 :(得分:0)

您可以在click()之后添加driver.sleep(10000)以进行调试。

如果页面发生了变化,意味着链接和click()工作,并且当脚本点击链接时可能失败的原因是页面仍在加载,因此浏览器无法响应点击事件。

然后你可以在browser.get()之后移动driver.sleep(10000)来看click()是否可以工作。