最近要制作演示脚本,使用c#版的Selenium,遇到ClickAndHold左键点击不松开,滑动滑块验证
1、首先是使用谷歌浏览器插件Selenium IDE录制功能,录制滑块滑动验证登录,
然后导出成c#代码,如下
// Generated by Selenium IDE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Interactions;
using Xunit;
public class SuiteTests : IDisposable {
public IWebDriver driver {get; private set;}
public IDictionary<String, Object> vars {get; private set;}
public IJavaScriptExecutor js {get; private set;}
public SuiteTests()
{
driver = new ChromeDriver();
js = (IJavaScriptExecutor)driver;
vars = new Dictionary<String, Object>();
}
public void Dispose()
{
driver.Quit();
}
[Fact]
public void 22() {
driver.Navigate().GoToUrl("http://172.16.100.87:8031/index.jssp");
driver.Manage().Window.Size = new System.Drawing.Size(952, 1012);
driver.FindElement(By.Id("inp_user")).Click();
driver.FindElement(By.Id("inp_user")).SendKeys("yzsthjj2022");
driver.FindElement(By.Id("inp_pass")).Click();
driver.FindElement(By.Id("inp_pass")).SendKeys("ddzx0524");
{
var element = driver.FindElement(By.CssSelector(".slider-btn"));
Actions builder = new Actions(driver);
builder.MoveToElement(element).ClickAndHold().Perform();
}
{
var element = driver.FindElement(By.CssSelector(".slider-text"));
Actions builder = new Actions(driver);
builder.MoveToElement(element).Perform();
}
{
var element = driver.FindElement(By.CssSelector(".slider-text"));
Actions builder = new Actions(driver);
builder.MoveToElement(element).Release().Perform();
}
driver.FindElement(By.CssSelector(".slider-btn")).Click();
driver.FindElement(By.Id("btn_ok")).Click();
driver.FindElement(By.CssSelector("body")).Click();
}
}
2、但是转成到vs中,运行,滑动效果时而好,时而不行 ,代码如下:
/// <summary>
/// 打开页面
/// </summary>
private void OpenPage(string url)
{
_driver.Navigate().GoToUrl(url);
Thread.Sleep(1000);//用户名
_driver.FindElement(By.CssSelector("#inp_user")).SendKeys("yzsthjj2022");
//密码
_driver.FindElement(By.CssSelector("#inp_pass")).SendKeys("ddzx0524");{
//滑动
IWebElement element = _driver.FindElement(By.CssSelector(".slider-btn"));
Actions builder = new Actions(_driver);
builder.MoveToElement(element).ClickAndHold().MoveByOffset(291, 0).Release().Perform();//最开始没有加MoveByOffset,所以滑块只滑动了一半就返回了
}//{
// var element = _driver.FindElement(By.CssSelector(".slider-text"));
// Actions builder = new Actions(_driver);
// builder.MoveToElement(element).Perform();
//}//{
// var element = _driver.FindElement(By.CssSelector(".slider-text"));
// Actions builder = new Actions(_driver);
// builder.MoveToElement(element).Release().Perform();
//}Thread.Sleep(1000);
//_driver.ExecuteJavaScript("alert('123')");
_driver.FindElement(By.CssSelector(".slider-btn")).Click();//点击鼠标
//_driver.FindElement(By.CssSelector("body")).Click();
var el_move = _driver.FindElement(By.CssSelector("body > div > div:nth-child(1) > div"));
new Actions(_driver).MoveToElement(el_move).Click().Perform();
//var el_move = _driver.FindElement(By.CssSelector("body"));
//el_move.Click();//_driver.ExecuteJavaScript("alert('开始点击登录')");
Thread.Sleep(1000);
_driver.FindElement(By.CssSelector("#btn_ok")).Click();//_driver.ExecuteJavaScript("alert('点击登录完毕')");
Thread.Sleep(1000);
}
builder.MoveToElement(element).ClickAndHold().MoveByOffset(291, 0).Release().Perform();
最开始没有加MoveByOffset,所以滑块只滑动了一半就返回了,导致验证失败
这里有个小技巧
这个移动的坐标值是在浏览器里直接拖动到末尾,html显示出来的,直接可以使用,不用自己计算了(按F12,右键滑动定位到F12打开的控制台里的元素)
以上即可实现,另外之前也使用过 DrapAndDrop(左键点击不松开拖动)功能,也是有问题,估计MoveByOffset(X, Y)这种方式可以解决,大家可以尝试下