Winappdriver& Python错误:AttributeError:' dict'对象没有属性' click'
我有一个迷你项目,需要使用Python在GUI Windows应用程序上自动化任务。
在试图找到解决方案时,我发现了像硒一样的Winappdriver。
当我尝试运行Python示例代码时,它将返回此错误: “ attributeError:'dict'对象没有属性'单击'”
此处的python代码:
from appium import webdriver
class SimpleCalculatorTests(unittest.TestCase):
@classmethod
def setUpClass(self):
#set up appium
desired_caps = {}
desired_caps["app"] = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723',
desired_capabilities= desired_caps)
@classmethod
def tearDownClass(self):
self.driver.quit()
def getresults(self):
displaytext = self.driver.find_element_by_accessibility_id("CalculatorResults").text
displaytext = displaytext.strip("Display is " )
displaytext = displaytext.rstrip(' ')
displaytext = displaytext.lstrip(' ')
return displaytext
def test_initialize(self):
self.driver.find_element_by_name("Clear").click()
self.driver.find_element_by_name("Seven").click()
self.assertEqual(self.getresults(),"7")
self.driver.find_element_by_name("Clear").click()
def test_addition(self):
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Plus").click()
self.driver.find_element_by_name("Seven").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
def test_combination(self):
self.driver.find_element_by_name("Seven").click()
self.driver.find_element_by_name("Multiply by").click()
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Plus").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Equals").click()
self.driver.find_element_by_name("Divide by").click()
self.driver.find_element_by_name("Eight").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
def test_division(self):
self.driver.find_element_by_name("Eight").click()
self.driver.find_element_by_name("Eight").click()
self.driver.find_element_by_name("Divide by").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
def test_multiplication(self):
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Multiply by").click()
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"81")
def test_subtraction(self):
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Minus").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(SimpleCalculatorTests)
unittest.TextTestRunner(verbosity=2).run(suite)
这是python响应:
C:\Users\anas9\PycharmProjects\winappdrivertest\venv\Scripts\python.exe C:/Users/anas9/PycharmProjects/winappdrivertest/main.py
test_addition (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:51: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("One").click()
ERROR
test_combination (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:58: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("Seven").click()
ERROR
test_division (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:70: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("Eight").click()
ERROR
test_initialize (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:45: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("Clear").click()
ERROR
test_multiplication (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:79: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("Nine").click()
ERROR
test_subtraction (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:86: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("Nine").click()
ERROR
======================================================================
ERROR: test_addition (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 51, in test_addition
self.driver.find_element_by_name("One").click()
AttributeError: 'dict' object has no attribute 'click'
======================================================================
ERROR: test_combination (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 58, in test_combination
self.driver.find_element_by_name("Seven").click()
AttributeError: 'dict' object has no attribute 'click'
======================================================================
ERROR: test_division (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 70, in test_division
self.driver.find_element_by_name("Eight").click()
AttributeError: 'dict' object has no attribute 'click'
======================================================================
ERROR: test_initialize (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 45, in test_initialize
self.driver.find_element_by_name("Clear").click()
AttributeError: 'dict' object has no attribute 'click'
======================================================================
ERROR: test_multiplication (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 79, in test_multiplication
self.driver.find_element_by_name("Nine").click()
AttributeError: 'dict' object has no attribute 'click'
======================================================================
ERROR: test_subtraction (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 86, in test_subtraction
self.driver.find_element_by_name("Nine").click()
AttributeError: 'dict' object has no attribute 'click'
----------------------------------------------------------------------
Ran 6 tests in 1.314s
FAILED (errors=6)
Process finished with exit code 0
此处可用的示例: winappdriver/tree/tree/master/samples/python
谢谢,谢谢
I have a mini project that needs to automate tasks on GUI windows app using Python.
While trying to find a solution I found WinAppDriver which is Selenium-like.
When I try to run the python sample code it's returned this error:
"AttributeError: 'dict' object has no attribute 'click'"
Here the python code:
from appium import webdriver
class SimpleCalculatorTests(unittest.TestCase):
@classmethod
def setUpClass(self):
#set up appium
desired_caps = {}
desired_caps["app"] = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723',
desired_capabilities= desired_caps)
@classmethod
def tearDownClass(self):
self.driver.quit()
def getresults(self):
displaytext = self.driver.find_element_by_accessibility_id("CalculatorResults").text
displaytext = displaytext.strip("Display is " )
displaytext = displaytext.rstrip(' ')
displaytext = displaytext.lstrip(' ')
return displaytext
def test_initialize(self):
self.driver.find_element_by_name("Clear").click()
self.driver.find_element_by_name("Seven").click()
self.assertEqual(self.getresults(),"7")
self.driver.find_element_by_name("Clear").click()
def test_addition(self):
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Plus").click()
self.driver.find_element_by_name("Seven").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
def test_combination(self):
self.driver.find_element_by_name("Seven").click()
self.driver.find_element_by_name("Multiply by").click()
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Plus").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Equals").click()
self.driver.find_element_by_name("Divide by").click()
self.driver.find_element_by_name("Eight").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
def test_division(self):
self.driver.find_element_by_name("Eight").click()
self.driver.find_element_by_name("Eight").click()
self.driver.find_element_by_name("Divide by").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
def test_multiplication(self):
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Multiply by").click()
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"81")
def test_subtraction(self):
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Minus").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(SimpleCalculatorTests)
unittest.TextTestRunner(verbosity=2).run(suite)
And here is the python response:
C:\Users\anas9\PycharmProjects\winappdrivertest\venv\Scripts\python.exe C:/Users/anas9/PycharmProjects/winappdrivertest/main.py
test_addition (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:51: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("One").click()
ERROR
test_combination (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:58: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("Seven").click()
ERROR
test_division (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:70: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("Eight").click()
ERROR
test_initialize (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:45: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("Clear").click()
ERROR
test_multiplication (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:79: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("Nine").click()
ERROR
test_subtraction (__main__.SimpleCalculatorTests) ... C:\Users\anas9\PycharmProjects\winappdrivertest\main.py:86: DeprecationWarning: find_element_by_name is deprecated. Please use find_element(by=By.NAME, value=name) instead
self.driver.find_element_by_name("Nine").click()
ERROR
======================================================================
ERROR: test_addition (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 51, in test_addition
self.driver.find_element_by_name("One").click()
AttributeError: 'dict' object has no attribute 'click'
======================================================================
ERROR: test_combination (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 58, in test_combination
self.driver.find_element_by_name("Seven").click()
AttributeError: 'dict' object has no attribute 'click'
======================================================================
ERROR: test_division (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 70, in test_division
self.driver.find_element_by_name("Eight").click()
AttributeError: 'dict' object has no attribute 'click'
======================================================================
ERROR: test_initialize (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 45, in test_initialize
self.driver.find_element_by_name("Clear").click()
AttributeError: 'dict' object has no attribute 'click'
======================================================================
ERROR: test_multiplication (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 79, in test_multiplication
self.driver.find_element_by_name("Nine").click()
AttributeError: 'dict' object has no attribute 'click'
======================================================================
ERROR: test_subtraction (__main__.SimpleCalculatorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\anas9\PycharmProjects\winappdrivertest\main.py", line 86, in test_subtraction
self.driver.find_element_by_name("Nine").click()
AttributeError: 'dict' object has no attribute 'click'
----------------------------------------------------------------------
Ran 6 tests in 1.314s
FAILED (errors=6)
Process finished with exit code 0
The example available here: WinAppDriver/tree/master/Samples/Python
Thanks,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我找到了解决方案,该解决方案是通过运行:
source
I found the solution, which is to revert Selenium to 3.141.0 by running:
Source
为了详细说明Anas H的答案,驾驶员正在返回字典,但应该返回weblement。简而言之,WinAppDriver目前似乎没有全部Selenium 4支持,但是它确实支持Selenium 3.14。使用ANAS H或用于Pycharm提供的PIP命令
,在Python软件包下您可以输入硒并删除当前的Selenium软件包。选择硒和硒4的研究,选择您所需的Selenium 3.1版本,同样我使用的是3.14。
如果由于某种原因选择坚持使用Selenium 4,则在提供的示例中可能会遇到的其他问题将是“ Find_element()”功能。您需要从selenium.webdriver.common.by导入“ by”,才能找到任何特定元素。
https://github.com/microsoft/microsoft/winappdriver/1638
To elaborate on the answer from Anas H, the driver is returning a dictionary but it should be returning a WebElement. In short, WinAppDriver does not seem to have full Selenium 4 support at the moment, however it does support Selenium 3.14. Use the pip command offered by Anas H
or for PyCharm, under Python Packages you can type in Selenium and delete your current selenium package. Research for Selenium and instead of Selenium 4, choose your desired Selenium 3.1 version, again I am using 3.14.
If for some reason you choose to stick with Selenium 4, others issues you may come across in the example you provided would be the "find_element()" function. You would need to import "By" from selenium.webdriver.common.by in order to find any particular element.
https://github.com/microsoft/WinAppDriver/issues/1638