.Click() - 一个单选按钮webdriver元素将其存档(无法控制执行此操作的页面)。 DOM元素本身仍然是相同的。
我想使用自己的原始选择器方法重置现有的webdriver元素,使其不再陈旧。我想要一个通用的解决方案,不需要提前知道如何找到元素。我想使用现有的陈旧元素来完成工作。理想情况看起来像这样(仅为了示例使用以下C#扩展方法):
IWebElement refreshedElement = driver.FindElement(staleElement.By());
有没有办法公开现有的元素位置?该元素的“地址”是否随处可用?它甚至不必是在找到元素时解决元素的原始方法,我不关心这一点。我只是不必创建一个子类来捕获这些信息。
答案 0 :(得分:0)
不,Selenium没有跟踪'你如何'找到一个元素,坦率地说,我认为这不应该是Selenium的责任。
我会将它包装到一个新类中,该类继承自RemoteWebElement
,并且有一个名为RefindElement
的方法。
答案 1 :(得分:0)
我可能会建议考虑添加" Page Class"的概念。基本上,我不是将元素添加到测试本身,而是创建一个单独的类,其中包含返回元素的方法。
例如,登录页面将包含三个元素,因此有三种方法:
public class LoginPage
{
private IWebDriver driver { get; set; }
public CSCView_SalesAspx(IWebDriver driver) { this.driver = driver; }
public IWebElement Id { get { return driver.FindElement(By.Id("login_id")); } }
public IWebElement Pw { get { return driver.FindElement(By.Id("login_pw")); } }
public IWebElement SubmitBtn { get { return driver.FindElement(By.Id("submitBtn")); } }
}
现在您要做的就是实例化该类,然后与该方法进行交互。你的元素应该始终是"新鲜的"因为你每次都在进行查询(没有任何额外的工作)。
LoginPage loginPage = new LoginPage(driver);
loginPage.Id.SendKeys("myName");
loginPage.Pw.SendKeys("myPw");
loginPage.SubmitBtn.Click();
最好的办法是,如果页面发生变化,而不是必须重写每个测试,那么您只需更改一个页面类并修复损坏的测试。