我被要求创建一个测试,该测试可以使用C#中的webdriver遍历页面上的所有链接。
我真的不知道从哪里开始,很抱歉没有提供任何代码。
我需要以某种方式选择页面上的所有链接并将它们放入数组等中,然后只需循环浏览它们,点击链接,返回上一页,点击下一个链接等。
答案 0 :(得分:3)
我认为它符合以下几行:
foreach (var item in _driver.FindElements(By.TagName("a")))
{
Trace.WriteLine(item.GetAttribute("href"));
}
请注意,这是使用NUnit从头部和近似解决方案编写的。
[TestFixture]
class UnitTests
{
[TestFixtureSetUp]
public void FixtureSetup()
{
_driver = new ChromeDriver();
_driver.Manage().Timeouts().ImplicitlyWait(Defaultamount);
_wait = new WebDriverWait(_driver, Defaultamount);
}
[TestFixtureTearDown]
public void FixtureTearDown()
{
_driver.Quit();
}
//...
}
代码将是:
[TestCase("www.googel.com")]
public bool TestAllWebpageLinks(string url, Result = true)
{
_driver.Navigate().GoToUrl(url);
var result = _driver.FindElements(By.TagName("a"))
.Select(o=>o.GetAttribute("href"))
.ToDictionary(o=>o,o=>TestPage(url,o));
return result.All(o => o.Value);
}
public bool TestPage(string url, string link){
try
{
_driver.Navigate().GoToUrl(url);
_driver.FindElement(By.XPath("//a[@href='"+link+"']")).Click();
return true;
}
catch (Exception ex)
{
return false;
}
}
就像说明一样,Resharper插件将简化运行单元测试。
答案 1 :(得分:1)
请看这里:How to browse a whole website using selenium?
由于您提到了一个页面而不是整个网站,因此有一些简单的方法。
使用IWebElements
的xpath定位器填充//a
的实现...或者通过标记名获取它作为Margus提及。
然后循环浏览并单击IWebElement
列表中的每个IWebElements
。将driver.Url
保存在项目列表中以供审阅,或稍后输出您要从页面中捕获的任何其他内容。如果您有已检查的已知参数,则可以在此处进行验证。然后执行driver.Navigate().Back()
。这会让你回到前一个位置来测试下一个元素。可能还希望保存href以及Margus建议并将其与另一页上的driver.Url
进行比较。
根据评论进行更新
public class Links
{
public string LinkName { get; set; }
public string href { get; set; }
public string newPageUrl { get; set; }
}
string newPageUrl = "";
string linkName = "";
string href = "";
List<Links> links = new List<Links>();
foreach (IWebElement item in _driver.FindElements(By.TagName("a")))
{
href = item.GetAttribute("href");
linkName = item.text();
item.click();
newPageUrl = driver.Url();
links.Add(new Links
{
NewPageUrl = newPageUrl,
Href = href,
LinkName = linkName
});
driver.Navigate().Back();
}
然后您的列表将是该类的列表,该列将具有您想要的每个链接的特定属性以及使用新URL的导航。然后,如果您想跟踪其他内容或测试其他内容,您可以轻松添加内容。
答案 2 :(得分:0)
使用Selenium-WebDriver,您只需致电:
或者,如果您想要更多选项,可以使用像http://sizzlejs.com/这样的库和webdriver,这样可以让您调用类似的内容:
您还可以使用其他外部帮助:
这取决于您的网页以及链接的生成方式。
答案 3 :(得分:0)
这个完整的程序可能对您有所帮助:代码是Java
我正在打印所有链接名称。
import java.util.List;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TrailRuns
{
public static void main(String[] args) throws Exception
{
WebDriver driver = new FirefoxDriver();
driver.get("http://www.googl.com/");
driver.manage().window().maximize();
List<WebElement> objWEs = driver.findElements(By.tagName("a"));
for(WebElement ele:objWEs)
System.out.println(ele.getText());
}
}