如何处理每次动态变化的Xpath?

时间:2015-12-03 09:54:10

标签: selenium xpath selenium-webdriver selenium-ide browser-automation

我正在编写selenium web-driver脚本。脚本的场景是:
1)登录www.yahoomail.com
2)成功登录。
3)点击"撰写"按钮
4)在" To"中输入电子邮件ID。领域。
5)在"主题字段中输入主题。
6)在" Text"中输入电子邮件正文领域。
7)点击"发送"按钮。

使用Firepath,我已经采用了#34; Compose"中提到的字段的xpath。页。 但每当我打开Compose页面时,这个xpath都会动态变化。

以下是我正在使用的脚本:

    WebDriver oYahoo = new FirefoxDriver();
    oYahoo.get("http://www.yahoomail.com/");
    oYahoo.manage().window().maximize();
    oYahoo.findElement(By.xpath(".//*[@id='login-username']")).sendKeys("abcdefasdf@yahoo.com");
    oYahoo.findElement(By.xpath(".//*[@id='login-passwd']")).sendKeys("sfgas234@123");
    oYahoo.findElement(By.xpath(".//*[@id='login-signin']")).click();
    oYahoo.findElement(By.xpath(".//*[@id='Compose']/button")).click();
    oYahoo.findElement(By.xpath(".//*[@id='yui_3_16_0_1_1448364357109_2222']")).sendKeys("abcdefgh@gmail.com");
    oYahoo.findElement(By.xpath(".//*[@id='subject-field']")).sendKeys("Hi This is my first automated mail");
    oYahoo.findElement(By.xpath(".//*[@id='yui_3_16_0_1_1448364357109_1966']")).sendKeys("Hi This is my first automated mail");
    oYahoo.findElement(By.xpath(".//*[@id='yui_3_16_0_1_1448364357109_2465']")).click();
    oYahoo.quit();

我们可以做什么,以便动态地使用Xpath?我们是否需要在某些课程中映射这些内容?我们是否必须为#34; Compose"写任何其他课程?弹出? 如果"是"那我们怎么做呢?

2 个答案:

答案 0 :(得分:0)

尝试观察每次重复的常见模式。一个id前缀或类前缀,任何东西。

然后在By.xpath(..)功能中使用以下选择器。

//*[contains(@id,’your-common-pattern’)]

答案 1 :(得分:0)

我参与了一个项目,其中每次生成页面时随机的类名称以及我发现获取那些标签/输入/ ...的独特方式是我使用nth-child()函数和css选择器。思考方法如下:我想从第一个表的第二行输入第三个。

结帐这个小提琴,了解我的意思。 https://jsfiddle.net/8v150af1/