-1

我注意到,当我使用 selenium Web 驱动程序与网页上的元素进行交互时,我的代码变得不可读,因为我使用了很多 XPath-s 来查找这些元素。例如:

driver.FindElement(By.XPath("//div[@class='login']//a[@href='#']"), Globals.TIMEOUT).Click();
var loginField = driver.FindElement(By.XPath("//div[@id='login_box']//input[@name='login_name']"));
jdriver.ExecuteScript("arguments[0].setAttribute('value', '" + login + "')", loginField);
var passwordField = driver.FindElement(By.XPath("//div[@id='login_box']//input[@name='login_password']"));
jdriver.ExecuteScript("arguments[0].setAttribute('value', '" + password + "')", passwordField);
driver.FindElement(By.XPath("//div[@id='login_box']//input[@type='submit']")).Click();
driver.FindElement(By.XPath("//div[@class='nameuser']"), Globals.TIMEOUT);
我认为我可以将 XPath 值放入常量字符串中,但在阅读代码时查看元素的实际 XPath 非常有帮助。但另一方面,当某些对象的 XPath 发生更改时,我必须在所有使用它的地方更改它。那么这个问题的最佳解决方案是什么?
4

2 回答 2

1

使用页面工厂使用 Selenium页面对象模型。有助于保持干净的代码并增强代码的可读性。

于 2019-01-10T11:57:01.290 回答
0

创建页面对象文件。

例如,如果您经常使用 xPath "//div[@id='login_box']//input[@type='submit']",请在页面对象文件中放置:

var loginSubmit = "//div[@id='login_box']//input[@type='submit']"

然后在您的主文件中导入页面对象文件:

using myPageObjectFile

driver.FindElement(By.XPath(myPageObjectFile.loginSubmit));

我的 C# 不是很好,所以它可能不完全是这样。但是达到这种效果的东西应该起作用。

这样当xPath发生变化时,只需要在页面对象文件中进行调整即可。

于 2019-01-10T11:58:49.497 回答