如何在.NET WebForm中用Selenium定位含__doPostBack的链接元素
解决Selenium定位.NET WebForm中__doPostBack链接的问题
嘿,我明白你的困扰了!你之前的XPath没生效的原因很简单:你找的是href='ctl01',但实际上这个链接的href属性值是完整的javascript:__doPostBack('ctl01',''),两者完全不匹配,自然找不到元素。
给你几个靠谱的定位方案,你可以根据实际情况选:
精确匹配href的完整内容:直接用XPath或CSS选择器匹配整个href字符串(注意用
@前缀避免引号转义的麻烦)// XPath写法 var element = Driver.FindElement(By.XPath(@"//a[@href=""javascript:__doPostBack('ctl01','')""]")); // CSS选择器写法 var element = Driver.FindElement(By.CssSelector(@"a[href=""javascript:__doPostBack('ctl01','')""]"));匹配href的部分内容(更灵活):如果担心页面渲染时href有细微变化(比如多余空格),可以用
contains或starts-with匹配关键片段// 匹配包含指定__doPostBack参数的href var element = Driver.FindElement(By.XPath(@"//a[contains(@href, ""__doPostBack('ctl01','')"")]")); // 匹配以指定内容开头的href,精准度更高 var element = Driver.FindElement(By.XPath(@"//a[starts-with(@href, ""javascript:__doPostBack('ctl01'"")]"));结合文本双重验证:如果当前语言环境下链接文本(比如'registration form')是固定的,可以同时匹配文本和href,避免误定位其他元素
var element = Driver.FindElement(By.XPath(@"//a[text()='registration form' and contains(@href, 'ctl01')]"));
另外小提示:在C#里用@前缀定义字符串,能省去大量双引号转义的工作,代码可读性会好很多。
内容的提问来源于stack exchange,提问作者Matt W
相关产品推荐
相关产品推荐

