Selenium WebDriver - 执行页面滚动并单击页面上的多个检查

时间:2016-07-22 11:36:13

标签: selenium selenium-webdriver

亲爱的,

需要以下方案的帮助!

场景 - 登录亚马逊网站,成功登录后,我正在搜索三星galaxy手机,一旦搜索结果显示在页面上,我需要通过选择缩小搜索结果范围从页面左侧需要滚动的下面的复选框

  • 三星
  • 的Android
  • 电池 - 3000至3999 MAH
  • 屏幕 - 5.5英寸及以上
  • Ram - 4GB以上
  • 低价= 25000
  • 高价= 300000

我的代码(实施POM)

问题 - 这段代码正在检查三星,但是当它去检查android时,我收到了消息 -

  

在缓存中找不到元素 - 可能页面已经更改了   被查询命令持续时间或超时:30.13秒

请告诉我如何实现滚动部分并完成我提到的所有选择。感谢您提前帮助!!

代码

public class Amazon_Samsung_Galaxy_Search 
{
    WebDriver driver;

    public Amazon_Samsung_Galaxy_Search(WebDriver driver)
    {
        this.driver=driver;

    }

    @FindBy (xpath = ".//input[@id='twotabsearchtextbox']") WebElement Product_Search;
    @FindBy (xpath = "//input[@class='nav-input'][@type='submit']") WebElement Search_Click;
    @FindBy (xpath = ".//*[@id='ref_1485076031']//img[@alt='Android']") WebElement Android_Check;
    @FindBy (xpath = ".//*[@id='ref_3837712031']//img[@alt='Samsung']") WebElement Samsung_Check;
    @FindBy (xpath = ".//*[@id='ref_8561098031']//img[@alt='3000 - 3999 mAh']") WebElement Battery_Check;
    @FindBy (xpath = ".//*[@id='ref_6631751031']//img[@alt='5.5 Inches & Above']") WebElement Screen_Check;
    @FindBy (xpath = ".//*[@id='ref_8561129031']//img[@alt='4 GB & More']") WebElement Ram_Check;
    @FindBy (xpath = ".//input[@id='low-price']") WebElement Low_Price;
    @FindBy (xpath = ".//input[@id='high-price']") WebElement High_Price;
    @FindBy (xpath = "//input[@class='leftNavGoBtn']") WebElement GO_Button;
    @FindBy (xpath = ".//span[@id='quartsPagelet']") WebElement Search_Result;

    public void Search_Samsung_Galaxy()
    {
        Product_Search.sendKeys("Samsung Galaxy");
        Search_Click.click();

        Samsung_Check.click();

        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='ref_1485076031']//img[@alt='Android']")));

        Coordinates cor = ((Locatable)Android_Check).getCoordinates();
        cor.inViewPort();

        Android_Check.click();

    }

}

1 个答案:

答案 0 :(得分:1)

由于Stale Element Reference Exception而发生。

最常见的原因是该元素所属的页面已刷新,或者用户已导航到另一个页面。一个不太常见但仍然常见的原因是JS库删除了一个元素并将其替换为具有相同ID或属性的元素。在这种情况下,尽管替换元件可能看起来相同,但它们是不同的;驱动程序无法确定替换实际上是预期的。

在您的情况下,您已经存储了Android_Check,因此点击Samsung_Check.click();后页面发生了变化,因此,selen在缓存中找不到Android_CheckAndroid_Check需要再次刷新,你应该尝试如下: -

WebDriverWait wait = new WebDriverWait(driver, 10);
Android_Check = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='ref_1485076031']//img[@alt='Android']")));

Coordinates cor = ((Locatable)Android_Check).getCoordinates();
cor.inViewPort();

Android_Check.click();

希望它有所帮助.. :)