java util nosuch ele_Selenium Python操作链在Firefox上失败

我正在使用以下库进行测试:py==1.4.31

pytest==2.8.5

requests==2.9.1

robotframework==2.8.5

robotframework-selenium2library==1.5.0

selenium==3.3.1

python 2.7

每当我试图在Firefox上执行操作链命令时,都会收到一个WebDriverException。代码对Chrome和IE都很好,我尝试过几种不同风格的Action-Chain命令,但都失败的原因是相同的。在

^{pr2}$

。。。还有。。。在ActionChains(self.driver) \

.key_down(Keys.SHIFT) \

.click(self.driver.find_element_by_xpath("//select[@name='ctstate']/option[@value='" + stateList[0] + "']")) \

.click(self.driver.find_element_by_xpath("//select[@name='ctstate']/option[@value='" + stateList[1] + "']")) \

.click(self.driver.find_element_by_xpath("//select[@name='ctstate']/option[@value='" + stateList[2] + "']")) \

.key_up(Keys.SHIFT) \

.perform()

从命令中可以看到,我在屏幕上选择对象时按住shift键。然后我松开换档键。以下是我收到的失败:firewall.py:454: in editCommon

ActionChains(self.driver).key_down(Keys.SHIFT).click(self.driver.find_element_by_xpath("//select[@name='ctstate']/option[@value='" + stateList[0] + "']")).click(self.driver.find_element_by_xpath("//select[@name='ctstate']/option[@value='" + stateList[1] + "']")).click(self.driver.find_element_by_xpath("//select[@name='ctstate']/option[@value='" + stateList[2] + "']")).key_up(Keys.SHIFT).perform()

C:\Python27\lib\site-packages\selenium-3.3.1-py2.7.egg\selenium\webdriver\common\action_chains.py:80: in perform

action()

C:\Python27\lib\site-packages\selenium-3.3.1-py2.7.egg\selenium\webdriver\common\action_chains.py:232: in

{"value": keys_to_typing(value)}))

C:\Python27\lib\site-packages\selenium-3.3.1-py2.7.egg\selenium\webdriver\remote\webdriver.py:238: in execute

self.error_handler.check_response(response)

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self =

response = {'status': 500, 'value': '{"value":{"stacktrace":"org.openqa.selenium.UnsupportedCommandException: sendKeysToActiveEle...: \'10.0\', java.version: \'1.8.0_151\'\nDriver info: driver.version: unknown","error":"unknown command"},"status":9}'}

def check_response(self, response):

"""

Checks that a JSON response from the WebDriver does not have an error.

:Args:

- response - The JSON response from the WebDriver server as a dictionary

object.

:Raises: If the response contains an error message.

"""

status = response.get('status', None)

if status is None or status == ErrorCode.SUCCESS:

return

value = None

message = response.get("message", "")

screen = response.get("screen", "")

stacktrace = None

if isinstance(status, int):

value_json = response.get('value', None)

if value_json and isinstance(value_json, basestring):

import json

try:

value = json.loads(value_json)

if len(value.keys()) == 1:

value = value['value']

status = value.get('error', None)

if status is None:

status = value["status"]

message = value["value"]

if not isinstance(message, basestring):

value = message

try:

message = message['message']

except TypeError:

message = None

else:

message = value.get('message', None)

except ValueError:

pass

exception_class = ErrorInResponseException

if status in ErrorCode.NO_SUCH_ELEMENT:

exception_class = NoSuchElementException

elif status in ErrorCode.NO_SUCH_FRAME:

exception_class = NoSuchFrameException

elif status in ErrorCode.NO_SUCH_WINDOW:

exception_class = NoSuchWindowException

elif status in ErrorCode.STALE_ELEMENT_REFERENCE:

exception_class = StaleElementReferenceException

elif status in ErrorCode.ELEMENT_NOT_VISIBLE:

exception_class = ElementNotVisibleException

elif status in ErrorCode.INVALID_ELEMENT_STATE:

exception_class = InvalidElementStateException

elif status in ErrorCode.INVALID_SELECTOR \

or status in ErrorCode.INVALID_XPATH_SELECTOR \

or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER:

exception_class = InvalidSelectorException

elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE:

exception_class = ElementNotSelectableException

elif status in ErrorCode.INVALID_COOKIE_DOMAIN:

exception_class = WebDriverException

elif status in ErrorCode.UNABLE_TO_SET_COOKIE:

exception_class = WebDriverException

elif status in ErrorCode.TIMEOUT:

exception_class = TimeoutException

elif status in ErrorCode.SCRIPT_TIMEOUT:

exception_class = TimeoutException

elif status in ErrorCode.UNKNOWN_ERROR:

exception_class = WebDriverException

elif status in ErrorCode.UNEXPECTED_ALERT_OPEN:

exception_class = UnexpectedAlertPresentException

elif status in ErrorCode.NO_ALERT_OPEN:

exception_class = NoAlertPresentException

elif status in ErrorCode.IME_NOT_AVAILABLE:

exception_class = ImeNotAvailableException

elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED:

exception_class = ImeActivationFailedException

elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS:

exception_class = MoveTargetOutOfBoundsException

else:

exception_class = WebDriverException

if value == '' or value is None:

value = response['value']

if isinstance(value, basestring):

if exception_class == ErrorInResponseException:

raise exception_class(response, value)

raise exception_class(value)

if message == "" and 'message' in value:

message = value['message']

screen = None

if 'screen' in value:

screen = value['screen']

stacktrace = None

if 'stackTrace' in value and value['stackTrace']:

stacktrace = []

try:

for frame in value['stackTrace']:

line = self._value_or_default(frame, 'lineNumber', '')

file = self._value_or_default(frame, 'fileName', '')

if line:

file = "%s:%s" % (file, line)

meth = self._value_or_default(frame, 'methodName', '')

if 'className' in frame:

meth = "%s.%s" % (frame['className'], meth)

msg = " at %s (%s)"

msg = msg % (meth, file)

stacktrace.append(msg)

except TypeError:

pass

if exception_class == ErrorInResponseException:

raise exception_class(response, message)

elif exception_class == UnexpectedAlertPresentException and 'alert' in value:

raise exception_class(message, screen, stacktrace, value['alert'].get('text'))

> raise exception_class(message, screen, stacktrace)

E WebDriverException: Message: sendKeysToActiveElement

E Build info: version: '3.6.0', revision: '6fbf3ec767', time: '2017-09-27T16:15:40.131Z'

E System info: host: 'DESKTOP-NTB4PU8', ip: '172.16.190.211', os.name: 'Windows 10', os.arch: 'x86', os.version: '10.0', java.version: '1.8.0_151'

E Driver info: driver.version: unknown

E Stacktrace:

E at org.openqa.selenium.remote.http.AbstractHttpCommandCodec.encode (AbstractHttpCommandCodec.java:220)

E at org.openqa.selenium.remote.http.AbstractHttpCommandCodec.encode (AbstractHttpCommandCodec.java:118)

E at org.openqa.selenium.remote.server.ProtocolConverter.handle (ProtocolConverter.java:84)

E at org.openqa.selenium.remote.server.ServicedSession.execute (ServicedSession.java:97)

E at org.openqa.selenium.remote.server.WebDriverServlet.lambda$handle$0 (WebDriverServlet.java:232)

E at java.util.concurrent.Executors$RunnableAdapter.call (None:-1)

E at java.util.concurrent.FutureTask.run (None:-1)

E at java.util.concurrent.ThreadPoolExecutor.runWorker (None:-1)

E at java.util.concurrent.ThreadPoolExecutor$Worker.run (None:-1)

E at java.lang.Thread.run (None:-1)

C:\Python27\lib\site-packages\selenium-3.3.1-py2.7.egg\selenium\webdriver\remote\errorhandler.py:193: WebDriverException

我很困惑为什么Firefox不喜欢我尝试使用任何操作链命令。如有任何建议或见解,我们将不胜感激。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PythonJava集成有多种方式,其中一种常见的方法是使用Jython。Jython是一种Python解释器,它可以在Java虚拟机(JVM)上运行Python代码,并且可以与Java代码无缝集成。 以下是使用Jython将PythonJava集成的步骤: 1. 下载并安装Jython:可以从官方网站(https://www.jython.org/download)下载Jython的最新版本。安装过程与普通Python解释器类似。 2. 创建Java项目:使用Java开发环境(如Eclipse或IntelliJ IDEA)创建一个新的Java项目。在项目中创建一个Java类,用于调用Python代码。 3. 编写Python代码:在Java项目的根目录下创建一个名为“python”的文件夹。在该文件夹中编写Python代码,并保存为.py文件。注意,Jython只支持Python 2.x版本。 4. 在Java代码中调用Python代码:在Java类中使用Jython提供的类库来调用Python代码。例如,可以使用PythonInterpreter类来创建Python解释器对象,然后使用该对象的execfile()方法来执行Python代码文件。 以下是一个简单的示例代码,演示如何在Java中调用Python代码: ```java import org.python.util.PythonInterpreter; public class Main { public static void main(String[] args) { PythonInterpreter interpreter = new PythonInterpreter(); interpreter.execfile("python/myscript.py"); } } ``` 在上面的示例中,我们创建了一个PythonInterpreter对象,并使用execfile()方法执行了名为“myscript.py”的Python文件。 需要注意的是,由于PythonJava是两种不同的语言,因此在将它们集成时需要特别小心。特别是在传递数据和处理类型转换时,需要注意它们之间的差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值