分类
文章

自动化测试人员的Selenium Webdriver Howtos

本教程讨论了十个基本的Selenium Webdriver howto,它们解决了Selenium自动化中的许多实时问题。

对于每一个howto,都提供了一段代码来演示用法。您可以在项目中立即使用示例代码。

在继续深入研究之前,我们必须告诉您,这里的提示仅会提供部分解决方案,您可以在程序中重用。因此,我们假设您了解Selenium Webdriver的基础知识。

建议阅读– 100多个Selenium访谈问题,以加快准备工作

现在,让我们用一种最常见的用例(如何在Web应用程序中自动化Web表)的解决方案打开这篇文章。

它是关于处理Web表的,我们将在其中展示如何查询表以从其单元格中获取数据。


//Create the Firefox driver instance.
WebDriver ff = new FirefoxDriver();

//First, find the table on the web page.
WebElement table = ff.findElement(By.id(searchResultsGrid));

//Second, fetch all the row elements of the table.
List<WebElement> rowSet = table.findElements(By.tagName("tr"));

//Third, loop through the rows and get the data from their cells.
for (WebElement row : rowSet) {
 List<WebElement> cells = row.findElements(By.xpath("./*"));
 for (WebElement cell : cells) {
 //Continue checking.
 }
}

在我们分享其余有用的Selenium技巧之前,上面的代码只是一个演示。请浏览下面的列表,以查看Selenium Webdriver其他方法。

10个最常见的Selenium编码问题

如何使用Selenium Webdriver单击Google搜索?

由于Google优化了它们的CSS和JS脚本,因此您不能纯粹依赖于将它们用作定位符。此外,它在结果页面上动态添加搜索链接。因此,您必须使用聪明的等待页面显示所有结果。

/*
 # Selenium Webdriver to click Google search and wait for the results.
 # ===================================================================
 */
public static void main(String[] args) {

    WebDriver ff = new FirefoxDriver();
    ff.get("http://www.google.com");
    WebElement search = ff.findElement(By.name("q"));
    search.sendKeys("Hello world!n");
    search.submit();

    // Wait until Google finishes displaying the results.
    WebElement waitForResult = (new WebDriverWait(ff, 10))
              .until(ExpectedConditions.presenceOfElementLocated(By.id("resultStats")));

    List<WebElement> searches = ff.findElements(By.xpath("//*[@id='rso']//h3/a"));

    // Print all the links appeared in the search.
    for (WebElement lnk : searches)
    {
        System.out.println(lnk.getAttribute("href"));
    }
}
在Selenium Webdriver中单击不起作用时该怎么办?

首先,您需要检查目标页面上是否存在要单击的元素。然后,您可以尝试使用以下代码。

ff.findElement(By.name("submit")).sendKeys(Keys.Return);
or
ff.findElement(By.name("submit")).sendKeys(Keys.Enter);
如何在Selenium Webdriver中模拟鼠标悬停?

由于在Selenium Webdriver中实现< 鼠标悬停 >是不现实的,但是我们可以一次性完成所有动作的排序。它会产生与mouseover相同的效果。

这是您可以使用的三行代码。

Actions action = new Actions(ff);
WebElement seq = ff.findElement(By.xpath("html/body/div[10]/ul/li[5]/a"));
action.moveToElement(seq).moveToElement(ff.findElement(By.xpath("/paste-expression"))).click().build().perform();
如何使用Selenium WebDriver在新选项卡中打开URL?

这是Selenium Webdriver代码片段,将有助于打开新选项卡。

它将在新标签页中打开页面。

String newtab = Keys.chord(Keys.CONTROL,Keys.RETURN); 
ff.findElement(By.linkText("URL")).sendKeys(newtab);

如果希望移至新选项卡,请使用以下代码。

ArrayList<String> tablist = new ArrayList<String> (ff.getWindowHandles());
ff.switchTo().window(tablist.get(0));
如何使用Selenium Webdriver从PDF文件提取数据?

可能您已经多次听说需要检查加载PDF的页面。

这是验证在线PDF文件的代码。但是您首先需要下载Apache PDF库

@Test
public void checkPDFpage() throws Exception {
    // Test page which loads pdf document.
    ff.get("http ... sample page loading pdf");
 
    URL nav = new URL(ff.getCurrentUrl());
    BufferedInputStream page = new BufferedInputStream(nav.openStream());
 
    PDDocument pdfdoc = null;
    try{
        pdfdoc = PDDocument.load(page);
        String result = new PDFTextStripper().getText(pdfdoc);
        System.out.println(result);
    }finally{
 
        if( pdfdoc != null )
        {
            pdfdoc.close();
        }//end of if
    }//finally
}//main
如何在Selenium WebDriver中使用JavaScript通过XPath获取元素?

这是使用JS检索XPath的简单方法。只需使用JS < document.evaluate >方法即可获取XPath。

function getElementByXpath(path) {
  return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

接下来,您可能必须从Webdriver代码中调用上述JavaScript函数。因此,如下所示使用< JavascriptExecutor >。


WebDriver ff = new FirefoxDriver();
if (ff instanceof JavascriptExecutor) {
    ((JavascriptExecutor) ff).executeScript("getElementByXpath('//xpath')");
}
如何在Selenium Webdriver中选择下拉选项?

使用以下Webdriver代码。这将有助于根据标签选择选项。

Select sel = new Select(ff.findElement(By.xpath("//path_to_drop_down")));
sel.deselectAll();
sel.selectByVisibleText("myvalue");

另外,您可以添加以下代码以获取第一个选定的值。

WebElement selection = sel.getFirstSelectedOption();
如何使用Selenium WebDriver选择所有下拉值?

这是从下拉列表中选择所有值的代码。

WebElement sel = ff.findElement(By.id("month"));
List<WebElement> items = sel.findElements(By.tagName("option"));

for (WebElement item : items) {
       item.click();
}
如何使用Webdriver获取元素的所有子元素?

您可以同时使用XPath和CSS查询Selenium Webdriver中元素的所有子元素。

List<WebElement> nodes = targetElement.findElements(By.xpath(".//*"));

Or

List<WebElement> nodes = targetElement.findElements(By.cssSelector("*"));
如何使用Selenium Webdriver获取页面的可见文本?

您需要执行以下步骤来获取可见的文本。

  • 调用< By.tagName(“body”) >选择DOM中的顶部元素。
  • 接下来,在同一元素上使用< getText() >方法。它将返回所需的可见文本。

推荐– 面向初学者的20大Selenium Webdriver编码技巧

摘要– 10个Selenium Webdriver Howtos

您可能已经观察到,仅阅读Selenium Webdriver教程并不会使我们成为自动化怪胎。没有。其他重要的技术问题,我们应该称为自动化测试人员。

但是大多数教程都错过了解决此类常见问题的方法。因此,我们进行了试验,研究并消除了许多自动化测试人员在工作中遇到的十个问题。最后,这篇有关十种Selenium Webdriver howtos的帖子得以发表。

如果您对Selenium Webdriver howtos有任何疑问,请随时询问。另外,如果您想分享一些内容,请告诉我们。我们会将它们添加到这篇文章中,并在其中提及您的参考。

保持学习,

你好W3

发表评论

电子邮件地址不会被公开。 必填项已用*标注