Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用selenium webdriver以蓝色标记文本背景(类似于将鼠标拖动到文本上)?_C#_Css_Selenium_Webdriver - Fatal编程技术网

C# 如何使用selenium webdriver以蓝色标记文本背景(类似于将鼠标拖动到文本上)?

C# 如何使用selenium webdriver以蓝色标记文本背景(类似于将鼠标拖动到文本上)?,c#,css,selenium,webdriver,C#,Css,Selenium,Webdriver,我有一个HTML元素,如下所示: <td title="11607" style="text-overflow:ellipsis;white-space:nowrap;">11607</td> 我想使用selenium web驱动程序标记文本11607 在寻找了很长一段时间后,我找到了两种解决方案; 第一个解决方案似乎是最合适的,但对我不起作用。我想知道是因为HTML标记是TD还是因为它不是正确的解决方案。 另一个解决方案有效,但我想改进它 我将详细说明如下: 第一个解

我有一个HTML元素,如下所示:

<td title="11607" style="text-overflow:ellipsis;white-space:nowrap;">11607</td>
我想使用selenium web驱动程序标记文本11607

在寻找了很长一段时间后,我找到了两种解决方案; 第一个解决方案似乎是最合适的,但对我不起作用。我想知道是因为HTML标记是TD还是因为它不是正确的解决方案。 另一个解决方案有效,但我想改进它

我将详细说明如下:

  • 第一个解决方案是: (摘自)
  • 它标记元素的所有背景,而不仅仅是字母。我想模拟在文本上精确拖动鼠标光标

    根据所附的屏幕截图 我看到的视图与第一行(11604)相似 但对第二排(11602)这样的视图感兴趣






    也许我可以在CSS中添加一个属性来模拟它?




    另外我尝试了通过SendKeys发送一些密钥的选项:

    Actions actions = new Actions(Driver);
                    actions.MoveToElement(element);
                    actions.SendKeys(Keys.Shift + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft);
                    actions.Build().Perform();
    
    这也是:

     Actions actions = new Actions(Driver);
                    actions.SendKeys(element, Keys.Shift + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft);
                    actions.Build().Perform();
    
    它仍然不起作用

    谢谢你的帮助

    我为您找到了解决方案的C#语法

    new Actions(Driver).MoveToElement(element, 1, 1).ClickAndHold().MoveToElement(element, element.Size.Width-1, 1).Release().Perform();
    
    在您的尝试中,它从元素的中心开始,一直到从元素的中心计算元素的宽度。但这应该从元素的左上角开始,一直到元素的宽度。

    希望这对您有效。

    是的,第一个解决方案是针对输入元素,因此不适用于您。如果您可以将此python代码转换为C#,它应该可以工作:
    ActionChains(driver)。使用_offset(elem,1,1)将_移动到_element_。单击_和_hold()。使用_offset(elem,elem.size['width'],1)将_移动到#element#。release()。perform()
    我将建议的代码转换为C:
    新操作(driver)。MoveToElement(element)。ClickAndHold().MoveByOffset(element.Size.Width,1).Release().Perform()并且它工作!但它也在同一表行中标记它前面的两个相邻值。我也很乐意解决这个问题,但同时,还有什么比什么都没有好。Kamal,我完全运行了你的代码,现在它标记了我的文本+一个“邻居”,为什么会这样?我不确定它是否会起作用,但只要试一下:
    新操作(驱动程序)。MoveToElement(元素,1,1)。ClickAndHold()。MoveToElement(element,element.Size.Width-1,1).Release().Perform();
    btw,你为什么用Release()而不是Build()?@C.Mar,如果你的问题解决了,请接受答案。而且,我不熟悉C#中可用的
    Build()
    方法,python中没有这样的方法。所以
    Release()
    正在释放用
    ClickAndHold()按住的鼠标按钮。
    我接受了你的答案。谢谢你的解释。祝你有愉快的一天。
    Actions actions = new Actions(Driver);
                    actions.MoveToElement(element);
                    actions.SendKeys(Keys.Shift + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft);
                    actions.Build().Perform();
    
     Actions actions = new Actions(Driver);
                    actions.SendKeys(element, Keys.Shift + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft);
                    actions.Build().Perform();
    
    new Actions(Driver).MoveToElement(element, 1, 1).ClickAndHold().MoveToElement(element, element.Size.Width-1, 1).Release().Perform();