Selenium能否在响应,调整大小的网站上找到正确的Web元素?

时间:2017-03-10 15:12:44

标签: java selenium xpath responsive-design webdriver

我的网络应用程序响应迅速。即它适用于不同的屏幕尺寸。我们的开发人员为此编写了代码,因此,xpath发现的大多数web元素实际上都有2.其中一个用于全屏,一个用于“移动”或小屏幕。

例如,如果我使用Firepath通过链接文本搜索Xpath,它会说“找到2个元素”只能看到一个,然后如果我调整浏览器窗口的大小,那个消失了,另一个可以被人看见。

我的问题是:我可以在屏幕尺寸上使用一个Selenium脚本吗?它会自动使用可见或可点击的元素吗?如果我只编写两个元素中的一个,我会得到“元素不可点击”的例外。

或者是将所有移动元素分别添加到页面对象的最佳解决方案,并创建我的方法:

if (DesktopWebElement.isVisible)
    do the test for desktop
else if (MobileWebElement.isVisible)
    do the test for mobile

分别添加每个移动元素并编写页面对象中的每个方法,这似乎是一项额外的工作。为了节省时间,我只是想知道是否有一种方法可以使用找到两个元素的Xpath,而Selenium会找到第一个可见的。

2 个答案:

答案 0 :(得分:0)

我遇到的情况是,除了不同的按钮外,显示的列因屏幕大小而异。

我的页面文件包含

等方法
public int getScreenWidth() {
    Dimension aScreen = webDriver.manage().window().getSize();
    return aScreen.getWidth();
}

然后我的代码就像:

if (screenWidth < 1440 ) {
    ...
}

开发人员正在研究哪些列已删除以及哪些列宽。

开发人员设置的屏幕宽度截止值决定了哪个按钮显示。所以我根据当前的屏幕宽度点击桌面或移动按钮。要求开发人员记录他们编码的屏幕宽度截止值。

答案 1 :(得分:0)

您是否尝试ExpectedConditions.visibilityOfElementLocatedBy,根据documents,它会为您提供附加到DOM的可见元素。这将使您能够与两个

中可见的元素进行交互
WebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocatedBy(By.xpath(".//someXpath")));
element.click();

如果您觉得更适合,也可以尝试elementTobeClickable条件。请注意,这不会减慢您的测试速度,只要元素可见/可点击,它就会被返回。