我注意到,当我使用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更改时,我必须在使用它的所有位置进行更改。
那么,解决此问题的最佳解决方案是什么?
答案 0 :(得分:1)
使用硒Page Object Model using Page factory。帮助维护干净的代码并增强代码的可读性。
答案 1 :(得分:0)
创建页面目标文件。
例如,如果您大量使用"//div[@id='login_box']//input[@type='submit']"
之类的xPath,则在页面目标文件中放置:
var loginSubmit = "//div[@id='login_box']//input[@type='submit']"
然后在您的主文件中导入页面目标文件:
using myPageObjectFile
driver.FindElement(By.XPath(myPageObjectFile.loginSubmit));
我的C#不好,所以可能不完全是这样。但是某种效果应该可以工作。
这样,当xPath更改时,只需要在页面目标文件中对其进行调整即可。