Selenium点击并不总是有效

时间:2015-07-30 13:22:50

标签: java google-chrome selenium selenium-webdriver click

我有一些点击选项卡的测试,但并不总是执行点击。

  • xpath在测试工作的大部分时间都是正确的

  • 这不是一个时间问题,因为我已经使用thread.sleep()和其他方法来确保元素在点击之前可见

  • 测试认为它正在执行点击,因为它没有抛出一个ElementNotFoundException或任何其他例外,当他们执行'点击。由于选项卡内容不会更改,因此稍后在单击后测试失败。

更多信息 我正在使用Selenium 2.44.0来实现在Chrome 44.0.2403.107 m上运行的Java测试。

我还能做些什么,或者这可能是硒的一个问题?

3 个答案:

答案 0 :(得分:18)

您可以尝试以下几种方法:

  • 显式elementToBeClickable等待:

    WebDriverWait wait = new WebDriverWait(webDriver, 10);
    
    WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.id("myid")));
    button.click()
    
  • 在点击前移动到元素:

    Actions actions = new Actions(driver);
    actions.moveToElement(button).click().build().perform();
    
  • 通过javascript点击:

    JavascriptExecutor js = (JavascriptExecutor)driver;
    js.executeScript("arguments[0].click();", button);
    

答案 1 :(得分:0)

如果标签名称包含任何唯一字符串,则可以使用ctrl+u。并确保您的标签不是动态的。它应该在源代码中可见(手动源代码( <!DOCTYPE html> <?php require_once 'Paginator.php'; $con = new mysqli( 'localhost', 'root', 'pixster', 'quotes' ); $limit = ( isset( $_GET['limit'] ) ) ? $_GET['limit'] : 25; $page = ( isset( $_GET['page'] ) ) ? $_GET['page'] : 1; $links = ( isset( $_GET['links'] ) ) ? $_GET['links'] : 7; $query = "SELECT table2.col2 AS a,table1.col2 AS b, table1.col1 AS c, table1.q_url AS d FROM table2, table1 WHERE table2.col1 = table1.col4 ";// AND table2.friendly_url= '".$authorname."'"; $Paginator = new Paginator( $con, $query ); $results = $Paginator->getData( $page, $limit ); ?> <?php for( $i = 0; $i < count( $results->data ); $i++ ) : ?> <tr> <td><?php echo $results->data[$i]['$i']; ?></td> <td><?php echo $results->data[$i]['$row['b']']; ?></td> </tr> <?php endfor; ?> <html> <head> <title>quotes Pagination</title> <link rel="stylesheet" href="css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="col-md-10 col-md-offset-1"> <h1>PHP Pagination</h1> <table class="table table-striped table-condensed table-bordered table- rounded"> <thead> <tr> <th width="20%">Sr. No</th> <th width="20%">Quotes</th> </tr> </thead> <tbody> <?php for( $i = 0; $i < count( $results->data ); $i++ ) : ?> <tr> <td><?php echo $results->data[$i]['$i']; ?></td> <td><?php echo $results->data[$i]['$row['b']']; ?></td> </tr> <?php endfor; ?></tbody> </table> <?php echo $Paginator->createLinks( $links, 'pagination pagination-sm' ); ?> </div> </div> </body> </html> ))。

答案 2 :(得分:0)

以下方法对我有用

WebElement button = SeleniumTools.findVisibleElement(By.cssSelector("#cssid"));

Actions actions = new Actions(driver);

actions.moveToElement(button).click().build().perform();