New Unit Test Solution
Installing the NuGet Package
I use Google browser to collect data, so the use of Google Browser driver, if you do not like the Google Browser can reference other driver package
Command
install-Packageselenium.webdriverinstall-package Selenium.WebDriver.ChromeDriver
Or a direct manager installation such as
Selenium.WebDriver.ChromeDriver is to copy the Chorme driver, the ChormeDriver.exe program, into the bin directory after the project is compiled.
Netcore is copied to the corresponding NETCOREAPPV file directory
So the basic reference is complete, the following is the implementation of the specific
First we create a test class Qzone.cs, and all of the calls behind us are tested and implemented in the test class
Public class qzonetest { [Fact] publicvoid qqlogin () { var New chromedriver (); " https://qzone.qq.com/ " ; Driver. Quit (); } }
Because it is the Xunit test class, you can directly right-click Debug Test, run up to see
The driver automatically opens the Chrome browser and reverses to the specified page.
The space page has been opened, here is the login step
There are two ways to log in, which is also provided by QQ
The first kind if have already landed QQ, directly click the avatar to be able to log in
The second type of account password login
Let's take a detailed introduction
First, the second, the first is relatively simple, after the second learning, the first kind is easy.
We need to find the text box to enter the account number and password
Here, we're going to use selenium to find the element.
This gives us a lot of ways to find elements, and by name we can see what it means.
var New chromedriver ();d River. Findelement ();d River. Findelementbyclassname ();d River. Findelementbycssselector ();d River. Findelementbyid ();d River. Findelementbyname ();d River. Findelementbytagname ();d River. Findelementbyxpath ()
We use the Byxpath method to find the element, the details of the XPath can be self-aware, I'll just show you how to quickly find the XPath
Just open the space address, locate the text box, and then examine the element, right-side element position right-->copy->copy XPath
Can get an address like this
*[@id = "U"]
Same way to find the password box
*[@id = "P"]
With this XPath we can find the XPath path to the user name and write it in the program
Try { varUserName = driver. Findelementbyxpath ("//*[@id = ' u ')"); //the username here is the text box for the user name.//set the value of the user nameUsername.sendkeys ("123456"); varPWD = driver. Findelementbyxpath ("//*[@id = ' P ']"); Pwd. SendKeys ("********"); } finally{driver. Quit (); }
An exception occurred after running
Don't panic, this is because the browser driver did not find the elements caused by, we have to carefully examine
The original text box is nested in an IFRAME, no wonder the current driver cannot find the element, because the current driver will only find the element under the current connection, the nested element is not included
So we're going to use the switching syntax.
Try { //There are two kinds of switching syntax, one is based on the index switch, and the other is switching based on the IFRAME name//Here we use the name switchItargetlocator Tagetlocator =driver. SwitchTo (); //tagetlocator.frame (1); //Frame index.Tagetlocator.frame ("Login_frame");//frame frame name. varUserName = driver. Findelementbyxpath ("//*[@id = ' u ')"); //the username here is the text box for the user name.//set the value of the user nameUsername.sendkeys ("123456"); varPWD = driver. Findelementbyxpath ("//*[@id = ' P ']"); Pwd. SendKeys ("********"); } finally{driver. Quit (); }
Then debug the tests, such as
This fills in the value into the text box.
Finally, click Login, find the login button element, click it the same way to find the login button element and click
[Fact] Public voidQqlogin () {DynamicType = (Newpicturetest ()). GetType (); stringCurrentDirectory =path.getdirectoryname (type. Assembly.location); varDriver =NewChromedriver (currentdirectory); Driver. URL="https://qzone.qq.com/"; Try { //There are two kinds of switching syntax, one is based on the index switch, and the other is switching based on the IFRAME name//Here we use the name switchItargetlocator Tagetlocator =driver. SwitchTo (); //tagetlocator.frame (1); //Frame index.Tagetlocator.frame ("Login_frame");//frame frame name. varUserName = driver. Findelementbyxpath ("//*[@id = ' u ')"); //the username here is the text box for the user name.//set the value of the user nameUsername.sendkeys ("123456"); varPWD = driver. Findelementbyxpath ("//*[@id = ' P ']"); Pwd. SendKeys ("********"); varBtnlogin = driver. Findelementbyxpath ("//*[@id = ' Login_button ')"); //here is to determine whether the login button is visible, can not write, call the click Method directly if(Btnlogin! =NULL&& btnlogin.displayed = =true) {Btnlogin.click (); } } finally{driver. Quit (); } }
And then the login was successful.
As long as you understand the driver operation of the browser some ways to find out what you want to do, such as click the Switch login box and shortcut login
For example, find the album element and click, find the menu to say the elements and click, set the text box value, Hair said, write a message can be explored using
Log in first talk about here, another day to write about or message board, or album pictures of the Preservation
C # uses selenium to realize QQ space data crawl login QQ space